#!/bin/bash

function usage(){
        echo "usage: paddle [--help] [<args>]"
        echo "These are common paddle commands used in various situations:"
        echo "    train             Start a paddle_trainer"
        echo "    merge_model       Start a paddle_merge_model"
        echo "    pserver           Start a paddle_pserver_main"
        echo "    version           Print paddle version"
        echo "    dump_config       Dump the trainer config as proto string"
        echo "    make_diagram      Make Diagram using Graphviz"
        echo ""
        echo "'paddle train --help' 'paddle merge_model --help', 'paddle pserver --help', list more detailed usage of each command"
}


function version(){
        echo "PaddlePaddle @PADDLE_VERSION@, compiled with"
        echo "    with_avx: @WITH_AVX@"
        echo "    with_gpu: @WITH_GPU@"
        echo "    with_double: @WITH_DOUBLE@"
        echo "    with_python: @WITH_PYTHON@"
        echo "    with_rdma: @WITH_RDMA@"
        echo "    with_glog: @WITH_GLOG@"
        echo "    with_gflags: @WITH_GFLAGS@"
        echo "    with_metric_learning: @WITH_METRIC@"
        echo "    with_timer: @WITH_TIMER@"
        echo "    with_predict_sdk: @WITH_PREDICT_SDK@"
}


MYDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [ ! -z "${DEBUGGER}" ]; then
    echo "Using debug command ${DEBUGGER}"
fi

CUDNN_LIB_PATH="@CUDNN_LIB_PATH@"

if [ ! -z "${CUDNN_LIB_PATH}" ]; then
    export LD_LIBRARY_PATH=${CUDNN_LIB_PATH}:${LD_LIBRARY_PATH}
fi

export PYTHONPATH=${PWD}:${PYTHONPATH}


# Check python lib installed or not.
pip --help > /dev/null
if [ $? -ne 0 ]; then
    echo "pip should be installed to run paddle."
    exit 1
fi

INSTALLED_VERSION=`pip freeze 2>/dev/null | grep '^paddle' | sed 's/.*==//g'`

if [ -z ${INSTALLED_VERSION} ]; then
   INSTALLED_VERSION="0.0.0"  # not installed
fi
cat <<EOF | python -
from distutils.version import LooseVersion
import sys
if LooseVersion("${INSTALLED_VERSION}") < LooseVersion("@PADDLE_VERSION@"):
  sys.exit(1)
else:
  sys.exit(0)
EOF

if [ $? -eq 1 ]; then  # Older version installed, or not installed at all
   echo "First time run paddle, need to install some python dependencies."
   BASEDIR=$(dirname "$0")
   pip install ${BASEDIR}/../opt/paddle/share/wheels/*.whl
   if [ $? -ne 0 ]; then
      echo "pip install wheels failed. "
      echo "Please use 'sudo paddle' at the first time you use PaddlePaddle"
      echo "PaddlePaddle will install some python dependencies automatically."
      exit 1
   fi
   echo "Python dependencies are installed."
fi

case "$1" in
    "train")
        ${DEBUGGER} $MYDIR/../opt/paddle/bin/paddle_trainer ${@:2}
        ;;
    "merge_model")
        ${DEBUGGER} $MYDIR/../opt/paddle/bin/paddle_merge_model ${@:2}
        ;;
    "pserver")
        ${DEBUGGER} $MYDIR/../opt/paddle/bin/paddle_pserver_main ${@:2}
        ;;
    "dump_config")
        python -m paddle.utils.dump_config ${@:2}
        ;;
    "make_diagram")
        python -m paddle.utils.make_model_diagram ${@:2}
        ;;
    "version")
        version
        ;;
    "--help")
        usage
        ;;
    *)
        usage
        ;;
 esac
